﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Citas.Negocio;
using Citas.Dominio;

namespace Citas.Controllers
{
    public class SeguridadController : Controller
    {

        IAdministracionService adminService = null;
        //
        // GET: /Seguridad/

        public ActionResult Index()
        {
            return View(adminService.ListarUsuarios());
        }

        public ActionResult BuscarXNombre(String nombre)
        {
            ICollection<Usuario> modelo = adminService.ListarUsuariosXNombre(nombre);
            return View("Index", modelo);
        }

        public ActionResult Create()
        {
            TempData["Perfil"] = ListarPerfiles();
            return View();
        }

        // POST: /Seguridad/Create
        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            try
            {
                string usuario = (String)collection["NombreUsuario"];
                string clave = (String)collection["Clave"];
                string confirmar = (String)collection["Confirmar"];
                string nombre = (String)collection["Nombre"];
                string perfil = (String)collection["Perfil"];

                if (clave != confirmar)
                {
                    TempData["mensaje"] = "Las claves no coinciden";
                    TempData["Perfil"] = ListarPerfiles();
                    Usuario us = new Usuario();
                    us.NombreUsuario = usuario;
                    us.Clave = clave;
                    us.Nombre = nombre;
                    us.Perfil = perfil;

                    return View(us);
                }

                Usuario r = adminService.RegistrarUsuario(usuario, clave, nombre, perfil);

                TempData["Perfil"] = ListarPerfiles();
                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                ModelState.AddModelError(string.Empty, ex.Message);
                TempData["Perfil"] = ListarPerfiles();
                return View("Create");
            }
        }

        // GET: /Seguridad/Delete/5


        public ActionResult Delete(int id)
        {
            return View(adminService.ObtenerUsuario(id));
        }

        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add delete logic here
                Usuario usuarioAEliminar = adminService.ObtenerUsuario(id);
                adminService.EliminarUsuario(usuarioAEliminar);
                TempData["mensaje"] = "Usuario " + usuarioAEliminar.NombreUsuario + " eliminado exitosamente";
                return RedirectToAction("Index"); // Todo bien, a la lista
            }
            catch
            {
                return View();
            }
        }

        //
        // GET: /Seguridad/Edit/5

        public ActionResult Edit(int id)
        {
            TempData["Perfil"] = ListarPerfiles();

            return View(adminService.ObtenerUsuario(id));
        }

        //
        // POST: /Seguridad/Edit/5

        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection)
        {
            try
            {
                Usuario usuarioAModificar = adminService.ObtenerUsuario(id);
                usuarioAModificar.NombreUsuario = (String)collection["NombreUsuario"];
                usuarioAModificar.Clave = (String)collection["Clave"];
                usuarioAModificar.Nombre = (String)collection["Nombre"];
                usuarioAModificar.Perfil = (String)collection["Perfil"];

                Usuario b = adminService.ModificarUsuario(
                    usuarioAModificar
                );

                TempData["Perfil"] = ListarPerfiles();

                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                ModelState.AddModelError(string.Empty, ex.Message);
                TempData["Perfil"] = ListarPerfiles();
                return View("Edit");
            }
        }


        public ActionResult LogOn()
        {
            return View();
        }

        // POST: /Seguridad/LogOn
        [HttpPost]
        public ActionResult LogOn(FormCollection collection)
        {
            try
            {
                string usuario = (String)collection["NombreUsuario"];
                string clave = (String)collection["Clave"];

                Usuario user = adminService.ObtenerUsuarioXNombreUsuario(usuario);

                if (user == null)
                {
                    TempData["mensaje"] = "El usuario no existe";
                    Usuario us = new Usuario();
                    us.NombreUsuario = usuario;

                    return View(us);
                }
                else
                {
                    if (user.Clave != clave)
                    {
                        TempData["mensaje"] = "Clave incorrecta";
                        Usuario us = new Usuario();
                        us.NombreUsuario = usuario;

                        return View(us);
                    }
                }

                Session.Add("usuario", user.NombreUsuario);
                Session.Add("nombre", user.Nombre);
                Session.Add("perfil", user.Perfil);

                if (user.Perfil == "Paciente")
                {
                    return Redirect("/Consultas");
                }
                else
                {
                    return Redirect("/Citas");
                }
            }
            catch (Exception ex)
            {
                ModelState.AddModelError(string.Empty, ex.Message);
                TempData["Perfil"] = ListarPerfiles();
                return View("Create");
            }
        }

        public ActionResult Salir() 
        {
            Session.Remove("usuario"); 
            Session.Remove("clave"); 
            Session.Remove("nombre");
            Session.Remove("perfil"); 
            Session.RemoveAll();
            Session.Clear();
            Session.Abandon();
           
            return RedirectToAction("LogOn", "Seguridad"); 
        }  

        private ICollection<SelectListItem> ListarPerfiles()
        {
            ICollection<SelectListItem> tipos = new List<SelectListItem>();
            tipos.Add(new SelectListItem() { Value = string.Empty, Text = "::. Seleccione .::" });
            tipos.Add(new SelectListItem() { Value = "Administ", Text = "Administrador" });
            tipos.Add(new SelectListItem() { Value = "Paciente", Text = "Paciente" });
            tipos.Add(new SelectListItem() { Value = "Citas", Text = "Citas" });

            return tipos;
        }

    }
}
